<!DOCTYPE html>
<html>
<!--
Copyright 2014 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Closure Unit Tests - goog.ui.Toolbar</title>
  <script src="../base.js"></script>
  <script>
    goog.require('goog.a11y.aria');
    goog.require('goog.dom');
    goog.require('goog.events.Event');
    goog.require('goog.events.EventType');
    goog.require('goog.testing.events');
    goog.require('goog.testing.events.Event');
    goog.require('goog.testing.jsunit');
    goog.require('goog.ui.Toolbar');
    goog.require('goog.ui.ToolbarMenuButton');
  </script>
  </head>
<body>
  <div id="toolbar-wrapper"></div>
  <script>
    var toolbar;
    var toolbarWrapper;
    var buttons;

    function setUp() {
      toolbar = new goog.ui.Toolbar();
      toolbarWrapper = goog.dom.getElement('toolbar-wrapper');

      // Render and populate the toolbar.
      toolbar.render(toolbarWrapper);
      var toolbarElem = toolbar.getElement();
      var button1 = new goog.ui.ToolbarMenuButton('button 1');
      var button2 = new goog.ui.ToolbarMenuButton('button 2');
      var button3 = new goog.ui.ToolbarMenuButton('button 3');
      button1.render(toolbarElem);
      button2.render(toolbarElem);
      button3.render(toolbarElem);
      toolbar.addChild(button1);
      toolbar.addChild(button2);
      toolbar.addChild(button3);
      buttons = [button1, button2, button3];
    }

    function tearDown() {
      toolbar.dispose();
    }

    function testHighlightFirstOnFocus() {
      var firstButton = buttons[0];

      // Verify that focusing the toolbar via the keyboard (i.e. no click event) highlights the
      // first item and sets it as the active descendant.
      goog.testing.events.fireFocusEvent(toolbar.getElement());
      assertEquals(0, toolbar.getHighlightedIndex());
      assertTrue(firstButton.isHighlighted());
      assertEquals(
        firstButton.getElement(), goog.a11y.aria.getActiveDescendant(toolbar.getElement()));

      // Verify that removing focus unhighlights the first item and removes it as the active
      // descendant.
      goog.testing.events.fireBlurEvent(toolbar.getElement());
      assertEquals(-1, toolbar.getHighlightedIndex());
      assertNull(goog.a11y.aria.getActiveDescendant(toolbar.getElement()));
      assertFalse(firstButton.isHighlighted());
    }

    function testHighlightSelectedOnClick() {
      var firstButton = buttons[0];
      var secondButton = buttons[1];

      // Verify that mousing over and clicking on a toolbar button selects only the correct item.
      var mouseover = new goog.testing.events.Event(
        goog.events.EventType.MOUSEOVER, secondButton.getElement());
      goog.testing.events.fireBrowserEvent(mouseover);
      var mousedown = new goog.testing.events.Event(
        goog.events.EventType.MOUSEDOWN, toolbar.getElement());
      goog.testing.events.fireBrowserEvent(mousedown);
      assertEquals(1, toolbar.getHighlightedIndex());
      assertTrue(secondButton.isHighlighted());
      assertFalse(firstButton.isHighlighted());
      assertEquals(
        secondButton.getElement(), goog.a11y.aria.getActiveDescendant(toolbar.getElement()));
    }
  </script>
</body>
</html>

